const cookies = require('./cookies.json');
const ids = require('./id.json');

cookies.forEach((element) => {
  element.sameSite = 'None';
});

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({ headless: false, slowMo: 50 }); // 可视化浏览器，动作有轻微延迟以便观察

  // 2. 打开新页面
  const page = await browser.newPage();
  await page.setViewport({ width: 1280, height: 800 }); // 设置浏览器视口大小
  await page.setCookie(...cookies);

  // 4. 打开商品列表页
  const listPageUrl = 'https://seller.shopee.tw/portal/product/list/live/all'; // 替换为实际商品列表页 URL
  await page.goto(listPageUrl);
  console.log('已加载页面并设置 cookies');

  // 等待网页是否已经正常登录了
  await new Promise((resolve) => setTimeout(resolve, 3000)); // 等待 3 秒

  // 循环处理每个 product_id
  for (const id of ids) {
    const productDetails = `https://seller.shopee.tw/portal/product/${id.product_id}`;
    await page.goto(productDetails);

    const currentUrl = page.url();
    const pattern = /portal\/product\/\d+/;

    if (pattern.test(currentUrl)) {
      console.log(`正在更新产品 ID: ${id.product_id}`);
      try {
        await clickBottomUpdate(page);
        await clickImmediatelyUpdate(page);
        console.log(`更新完成：${id.product_id}`);
      } catch (error) {
        console.log(`更新失败：${id.product_id}`);
      }
    } else {
      console.log('页面路由不对');
    }
  }

  console.log('所有产品更新完成');
  await browser.close();
})();

/**
 * 底部更新
 * @param {传入实例} page
 * @returns
 */
const clickBottomUpdate = (page) => {
  return new Promise(async (resolve, reject) => {
    try {
      const selector = '.pre-order .btn-group .eds-radio';
      // 等待元素加载
      await page.waitForSelector(selector, { timeout: 5000 }); // 可根据需要调整超时时间

      // 获取元素句柄
      const elementHandle = await page.$(selector);

      if (elementHandle) {
        // 点击元素（如果需要）
        await elementHandle.click();
        resolve(true);
      } else {
        reject(false);
      }
    } catch (error) {
      console.error('操作失败:', error);
      reject(false);
    }
  });
};

/**
 * 二次确认立即更新
 * @param {传入实例} page
 * @returns
 */
const clickImmediatelyUpdate = (page) => {
  return new Promise(async (resolve, reject) => {
    try {
      // 底部更新按钮
      const updateButton =
        '.eds-button--xl-large.eds-button.eds-button--primary.eds-button--normal';
      const updateButtonHandle = await page.$(updateButton);

      if (updateButtonHandle) {
        await updateButtonHandle.click();
        console.log('点击了底部更新按钮元素');

        const buttons = await page.$$(
          '.eds-modal__footer .eds-modal__footer-buttons .eds-button.eds-button--primary.eds-button--normal:not(.disabled)'
        );
        const updateButton = (
          await Promise.all(
            buttons.map(async (button) => {
              const buttonText = await page.evaluate(
                (el) => el.textContent.trim(),
                button
              );
              return buttonText === '更新' ? button : null; // 如果文本是 "更新"，返回该按钮，否则返回 null
            })
          )
        ).filter((button) => button !== null)[0]; // 过滤 null，取第一个符合条件的按钮

        if (updateButton) {
          // 点击该按钮
          await updateButton.click();
          resolve(true);
        } else {
          reject(false);
        }
      } else {
        reject(false);
      }
    } catch (error) {
      reject(false);
    }
  });
};